這邊我們選用Robo 3T來作為操作MongoDB的工具,對於入門來說會降低許多門檻。
此篇大部分都用Shell來操作,GUI介面可以看到結果呈現,如果要新增DB、Collection、Document也是可以直接使用Roto 3T的GUI介面操作,這就不在此篇多做介紹了。
以下我們分為以下來介紹:
這邊我們先開啟Shell輸入
use testDB
MongoDB還蠻智能的,如果沒有testDB他就會建置一個資料庫,如果已經存在就會切換到該資料庫。
接著我們使用
db
就可以看到我們當下使用的DB名稱
我們試試看新增一張名為testCollection的Collection,Document為{"name":"2018 ithome鐵人賽"}
db.testCollection.insert({"name":"2018 ithome鐵人賽"})
成功新增後我們就來看看有哪些DB
show dbs
若要刪除的話,請使用use DB_NAME切換到你要刪除的DB,接著輸入
db.dropDatabase()
我們再用一次
show dbs
可以看到testDB就被刪掉囉~
使用 insert() 或 save() 方法。
Document的結構類似JSON,在這邊我們稱它叫BSON(Binary JSON)。
使用的語法如下 :
db.COLLECTION_NAME.insert(Document)
//切換到testDB
use testDB
//在col中新增Document
db.col.insert({title: '2018 ithome鐵人賽',
description: 'MongoDB+Robo 3T CRUD操作',
by: '酷哥',
tags: ['mongodb', 'database', 'ithome']
})
使用find()來看看我們insert的資料
//查看一筆
db.col.findOne()
P.S.在Robo 3T的console可以去用GUI去切換顯示方式歐
當然也可以一次新增多筆,且資料格式還可以不一樣(scheme free),是不是超級自由。
P.S. Scheme Free當然對資料正確性相對薄弱,MongoDB也有提供Schema Validation去建立Table Scheme。
db.col.insert([{title: '2018 ithome鐵人賽',
description: 'MongoDB+Robo 3T CRUD操作',
by: '酷哥',
tags: ['mongodb', 'database', 'ithome']},
{name:"Linda"},
{name:"Lue",age:22},
{name:"James",birthday:"2000/01/01"}])
也可以將Document設為變量把資料準備好,然後再執行insert
doc={title: '2018 ithome鐵人賽',
description: 'MongoDB+Robo 3T CRUD操作',
by: '酷哥',
tags: ['mongodb', 'database', 'ithome']
}
db.col.insert(doc)
或是跑迴圈insert
for (i=1;i<=5;i++){
v1=Math.ceil(Math.random()*10)+Math.ceil(Math.random()*20);
db.col_2.insert({_id: i,a:v1,b:i});
}
db.col_2.find()
使用 update() 方法。
使用的語法如下 :
db.collection.update( criteria, objNew, upsert, multi )
update()接受以下四個參數:
我們先來insert一些資料
db.users.insert([
{name:"Linda"},
{name:"Lue",age:22},
{name:"James",birthday:"2000/01/01"},
{name:"Webber",birthday:"1988/01/01",city:"Kaohsiung"},
{name:"Wade",birthday:"2010/01/01",phone: "234-5678"}])
db.users.find()
對Lue的這筆資料,更新city欄位,雖然原來的資料裡沒有city的欄位,但還是會將city新增進去。
db.users.update({name:"Lue"},{$set:{city:"Taipei"}})
db.users.find({name:"Lue"})
這時候如果沒有使用$set就會發生以下冏事,我們這次對Wade這筆資料也嘗試著更新city欄位。
db.users.update({name:"Wade"},{city:"Taipei"})
db.users.find({name:"Wade"})
這時候發現在find() Wade這筆資料的時候找不到(Fetched 0 record),我們用find()全部看看為什麼。
我們發現第五筆資料的name、birthday、phone全部都不見了,只剩下city:"Taipei",因為這邊我們並沒有跟他說我們要set甚麼欄位,所以找到Wade這筆資料後,就用{city:"Taipei"}這個document把整個第五筆取而代之。
更多實例大家可以試試看它的效果
//有找到目標才更新,只更新第一筆
db.test0.update( { "count" : { $gt : 1 } } , { $set : { "test2" : "OK"} } )
//有找到目標才更新,更新找出的每筆
db.test0.update( { "count" : { $gt : 3 } } , { $set : { "test2" : "OK"} },false,true )
//沒有找到目標,還是更新第一筆
db.test0.update( { "count" : { $gt : 4 } } , { $set : { "test5" : "OK"} },true,false )
//沒有找到目標,還是更新每筆
db.test0.update( { "count" : { $gt : 5 } } , { $set : { "test5" : "OK"} },true,true )
//有找到目標才更新,更新找出的每筆
db.test0.update( { "count" : { $gt : 15 } } , { $inc : { "count" : 1} },false,true )
//有找到目標才更新,更新第一筆
db.test0.update( { "count" : { $gt : 10 } } , { $inc : { "count" : 1} },false,false )
使用 remove() 方法。
在 remove前,可以先用find()檢查看看條件是否正確,避免誤刪。
使用的語法如下 :
db.collection.remove(
<query>,
<justOne>
)
參數說明 :
我們先來insert一些資料
db.users.insert([
{name:"酷哥",birthday:"1988/01/01",city:"Kaohsiung"},
{name:"酷哥",birthday:"1988/01/01",city:"Kaohsiung"},
{name:"酷哥",birthday:"1988/01/01",city:"Kaohsiung"}])
db.users.find()
我們新增了三筆一樣的資料並使用'name'='酷哥'當條件
db.users.remove({'name':'酷哥'})
db.users.find()
發現這三筆資料都被砍光光了,如果我們只想刪除這三筆中的一筆,需要在justOne 參數設1,如下
db.COLLECTION_NAME.remove(DELETION_CRITERIA,1)
如果要刪除所有數據可以使用
db.col.remove({})